//
// Created by mio on 25-5-9.
//

#include "CloudAssistant.h"
#include "./UI/center/MainWgt.h"
#include "./UI/list/ListinfoWgt.h"
#include "./UI/title/TitleWgt.h"

#include <QGridLayout>
#include <QMouseEvent>
#include <QPushButton>

CloudAssistant::CloudAssistant(QWidget *parent)
    : QWidget(parent)
{
    setWindowFlag(Qt::FramelessWindowHint);
    setAttribute(Qt::WA_StyledBackground);
    setFixedSize(800, 540);
    setStyleSheet("background-color: #121212");

    mainWgt_ = new MainWgt(this);
    listWgt_ = new ListinfoWgt(this);
    titleWgt_ = new TitleWgt(this);

    connect(listWgt_, &ListinfoWgt::sig_Select, mainWgt_, &MainWgt::slot_ItemClicked);

    // 布局
    QGridLayout* layout = new QGridLayout(this);
    layout->setSpacing(0);
    layout->addWidget(listWgt_, 0, 0, 2, 1);
    layout->addWidget(titleWgt_, 0, 1, 1, 2);
    layout->addWidget(mainWgt_, 1, 1, 1, 2);
    layout->setContentsMargins(0, 0, 0, 0);
    setLayout(layout);
}

CloudAssistant::~CloudAssistant() {}


void CloudAssistant::mousePressEvent(QMouseEvent *event)
{
    // ① 判断按下位置是不是按钮；若是按钮则交给按钮自己处理点击，不启动拖动
    if(!qobject_cast<QPushButton*>(childAt(event->pos())))
    {
        isPress_ = true;    // 即将拖动
        // &uarr; 鼠标绝对坐标 −  窗口左上全局坐标 ＝ 按下点到窗口左上的偏移
        point_ = event->globalPos() - this->frameGeometry().topLeft();
    }
    QWidget::mousePressEvent(event); // 继续向下分发，确保子控件能照常收到事件
}

void CloudAssistant::mouseMoveEvent(QMouseEvent *event)
{
    // ① 左键按住 & 处于拖动状态
    if(event->buttons() & Qt::LeftButton && isPress_)
    {
        // 通过位置获取与子控件的类型, 如果不是按钮就去移动
        if(!qobject_cast<QPushButton*>(childAt(event->pos())))
        {
            move(event->globalPos() - point_); // 把窗口左上角挪到新的位置
        }
    }
    QWidget::mouseMoveEvent(event); // 交给基类，供子控件继续处理 hover 等
}

void CloudAssistant::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton){ isPress_ = false; } // 只管左键。松开即停止拖动
    QWidget::mouseReleaseEvent(event);
}
